安卓学习---第二篇 深入理解安卓各个层次


0x00:Android 应用层

原装应用与用户安装应用 由各个组件组成

AndroidMainfest.xml

唯一的应用包名(如com.wiley.SomeApp)及版本信息Activity,Service,BroadcastReceiver和插桩定义权限定义(包括应用请求的权限以及应用自定义的权限)关于应用使用饼一起打包的外部程序库的信息其他支持性的指令,比如公用的uid信息,首先安装的 位置和UI 信息(如启动时的图标)附加: Mainifest文件中有给sharedUserId属性,两个由相同密钥签名,咱共享资源。Mainifest文件由IDE自动产生,由明文XML转换为二进制的XML文件.

Intent(应用间通信的关键组件Intent,消息对象)

AcivityActivity是一种面向用户的应用组件或者用户界面(UI)。

Broadcast Receiver另一种类型的IPC端点是Broadcast Recevier.它们通常会在应用希望接受一个匹配特种特定的隐式的Intent时出现。

ServiceService是一类在后台运行而无需用户界面的应用组件,用户不用直接与Service所属应用进行交互。

Content ProviderContent Provider是为各种通用、共享的数据存储提供的结构化访问接口。

0x01: Android 框架层

  1. Activity管理器 管理Intent的解析与目标,应用/Activity的启动等
  2. 视图系统 管理Activity种的视图(用户可见的UI组合)
  3. 程序包管理器 管理系统上之前或正在进入安装队列的程序包相关西信息
  4. 电话管理器 管理与电话服务,无线电状态,网络与注册信息相关的信息与任务
  5. 资源管理器 为注入图形,UI布局,字符串数等非代码应用资源提供访问
  6. 位置管理器 提供设置和读取(GPS,手机,Wi-Fi)位置信息的接口,位置信息包括具体定位信息,经纬度等
  7. 通知管理器 管理不同的时间通知,比如播放声音,震荡,LED闪灯,以及在状态栏中显示图标等

0x02: DalvikVM

DalvikVM是基于寄存器,整体开发流程:

​ 1 开发者以类似Java的语法进行编码;

​ 2 源代码被编译成.class文件(也类似于Java);

​ 3 得到的类文件被翻译成Dalvik字节码;

​ 4 所有类文件被合并为一个Dalvik可执行文件(DEX)文件;

​ 5 字节码被DalvikVM加载并解释执行。

ZygoteAndroid设备启动时,Zygote进程是最先运行的进程之一。接下来,Zygote负责启动其他服务以及加载Android框架所用的程序库。Zygote进程为每个Dalvik进程的加载器,通过复制自身进程副本(也成为forking分支)来创建进程。第二大功能是启动system_service进程,这个进程容纳了所有系统核心服务,并在system的AID用户环境中已特权权限运行。

0x03: 用户空间原生代码层

程序库—–Android框架层中的较高层次类所以来的许多底层功能都是通过共享库的方式来实现,并通过JNI进行访问的。所调用的程序库有些是标准的比如,GUN libc的标准函数库,非标准库Bionic libc(包含了大量自己的代码,为了努力降低C运行时库的内存使用空间,Android开发者还是先来一个自定义的动态链接器和线程API,切记很容易出现内存破坏漏洞)

核心服务—-核心服务是指建立基本操作系统环境的服务于Android原生组件。这些服务包括初始化空间的服务(如init),提供关键调试功能的服务(如adbd和debugggerd)等。注意,某些核心服务可能是硬件或版本特定的。

init—-init程序通过执行一系列命令对用户空间环境进行初始化。大致意思就是启动初始化服务,比如启动开机运行的服务。

Property—Property服务文娱Android的初始化服务中,它提供了一个持续性的,内存映射的,基于键值对的配置服务。比如网络接口配置,无线电选项甚至安全相关设置。

0x04: 内核

Android的根基—–Linux内核文档,Linux内核和Android使用的内核还还是有一些变化。一下是Android对Linux内核的一些方面的修改:

Binder—进程与进程之间通信的媒介

​ Binder机制是Android系统中最主要的进程间通信机制。Binder犹如一张大网,将Android整个系统中的组件,跨进程的组织在一起。Binder的作用可以概括为两点:

​ IPC:是一种跨进程通信手段,但是传输数据的大小受限制,不建议传输较大数据。

​ RPC:是一种远程过程调用手段,即一个进程中可以透明的调用另外一个进程中的方法。

ashmem—匿名共享内存服务,简称ashmem,是另一个在Linux内核Android分支中添加到代码模块。ashmem驱动基本上提供了基于文件,通过引用计数的共享内存接口。

pmem—Android特有的自定义驱动,用来管理1~16MB的大块物理上连续的内存区块。和ashmem的区别是,pmem需要分配进程

.日志记录器-–除了基于Linux内核的日志机制,自己也是用的一个日志记录子系统,logcat命令,俗称日志记录器(logger).包括4个独立的日志缓冲区main(主缓冲区),radio(无线电缓冲区),ecent(时间缓冲区),system(系统缓冲区)

Paeanoid Networking—Android内核是基于一个调用进程的辅助用户组来限制网络操作,而这个调用进程就是被称为Paranoid Networking的内核修改模块。在高层次上,这个模块将一个AID(以及随后的GID)映射到应用层的权限声明或请求上。例如:Manifest(切记不是mian)文件中的权限android.permission.INTERNET有效地映射带AID_INET AID(或GID 3003)上。大致就是 调用进程,然后利用权限限制权限。

本章小结:

​ Android安全设计和架构。主要的概念有:Android沙箱及Android使用的权限模型,包含了Android对Unix系统UID/GID映射关系的特殊实现AID,以及在整个系统中实施的限制和权能。另一个方面介绍了Android的逻辑层次,包括应用层,Android框架层,DalvikVM,及用户原生空间代码和Linux内核。以及Android系统相对于Linux系统的重要修改处。

×

纯属好玩

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

文章目录
  1. 1. 0x00:Android 应用层
  2. 2. 0x01: Android 框架层
  3. 3. 0x02: DalvikVM
  4. 4. 0x03: 用户空间原生代码层
  5. 5. 0x04: 内核
  • 本章小结:
  • ,